function animate( ele , attr_list , callback){
      attr_list.length = 0;

      for(var attr in attr_list){

            if(attr === "length") continue;

            // 判定 attr 是不是opacity
            if( attr === "opacity"){
                  attr_list[attr] = {
                        target : attr_list[attr] * 100,
                        start  : parseInt(getComputedStyle(ele)[attr] * 100)
                  }
            }else{
                  attr_list[attr] = {
                        target : attr_list[attr],
                        start  : parseInt(getComputedStyle(ele)[attr])
                  }
            }
            attr_list.length ++;
      }

      clearInterval(ele.t);
      ele.t = setInterval( function(){
            for(var attr in attr_list){
                  if(attr === "length") continue;
                  var speed = (attr_list[attr].target - attr_list[attr].start ) / 10;
                  speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);

                  // 让当前值开始计算; 
                  attr_list[attr].start += speed;

                  // 先赋值 ; 
                  // 区分 attr 是不是 opacity ; 
                  if( attr === "opacity"){
                        ele.style[attr] = attr_list[attr].start / 100;
                  }else{
                        ele.style[attr] = attr_list[attr].start + "px";
                  }
                  if( attr_list[attr].target === attr_list[attr].start ){
                        delete attr_list[attr];
                        attr_list.length --;
                                     
                        var count = 0;
                        if(attr_list.length <= 0){
                              clearInterval(ele.t);
                              typeof callback === "function" ? callback() : "";
                        }
                  }
            }
      } , 40)
}